SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TDMVTO_PART_I01]
/*-------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                --*/    
/*---Cliente              : OFISIS                --*/    
/*---Sistema              : Tesoreria                  --*/    
/*---M¢dulo               : Empresa                    --*/    
/*---Programa             : Guias Ingreso (O/C-O/S)    --*/    
/*---Script               : SP_TDMVTO_PART_I01_PPTO.sql--*/    
/*---Nombre SP            : SP_TDMVTO_PART_I01_PPTO    --*/    
/*---Desarrollado por     : Javier Flores A.           --*/    
/*---Fecha Creaci¢n       : 07/03/2000                 --*/    
/*---Base Datos           : Microsoft Sql Server       --*/    
/*---Versi¢n              : 7.0                        --*/    
/*---Invoca a SP          :                            --*/    
/*-------------------------------------------------------*/    
/*---Modificado 5 por     : Carlos Marquez Escobar     --*/  
/*---Fecha Modificaci¢n   : 18/04/2007                 --*/   
/*---Detalle Modificaci¢n : se pasoa a Procedure		--*/  
/*-------------------------------------------------------*/  
/*-------------------------------------------------------*/    
/*---Comentarios  STANDAR                              --*/    
/*---                                                  --*/    
/*---                                                  --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/* DROP PROC SP_TDMVTO_PART_I01     */    
/* GRANT execute ON SP_TDMVTO_PART_I01 TO PUBLIC     */    
/* SP_TDMVTO_PART_I01                                    */    
/*-------------------------------------------------------*/    
@ISCO_EMPR       TD_VC_003,    
@ISCO_USUA_MODI  TD_VC_008,    
@ISCO_PROV       TD_VC_020,    
@ISCO_TIPO_DOCU  TD_VC_003,    
@ISNU_DOCU_PROV  TD_VC_020,    
@ISTI_DOCU_ORIG  TD_VC_003,    
@ISNU_DOCU_ORIG  TD_VC_020,    
@ISCO_MONE       TD_VC_003,    
@ISTI_DOCU_GUIN  TD_VC_003,    
@ISNU_DOCU_GUIN  TD_VC_020,    
@INIM_DOCU_ORIG  TD_NU_016_004,    
@INIM_CONV       TD_NU_016_004,    
@INNU_CORR       TD_IN_001,    
@ISCO_UNID       TD_VC_003,    
@ISCO_ALMA       TD_VC_003,    
@INFA_TIPO_CAMB  TD_NU_016_004
	As
BEGIN    
    
Declare    
  @VNNU_CORR       TD_IN_001,    
  @VDFE_USUA_MODI  TD_DT_001,     
    
    
  @VSST_CNTR_PRES  TD_VC_001,     
  @VNAA_CNTR       TD_IN_001,     
  @VNMM_CNTR       TD_IN_001,     
  @VNNU_FETC_0001  TD_IN_001, /* Status del cursor */    
  @CSCO_PART    TD_VC_020,     
  @VSTI_SITU    TD_VC_003,     
  @VSST_CNTR_PARA  TD_VC_001,     
  @VNIM_PART     TD_NU_016_004,     
  @VNCA_PART       TD_IN_001,    
  @VSVA_MENS     TD_VC_100,     
  @VNIM_SALD    TD_NU_016_004,     
  @VSST_SIGN    TD_VC_001,     
  @VNIM_REAL    TD_NU_016_004,     
  @VSCO_MONE_PART  TD_VC_003,     
  @VNIM_UNIT  TD_NU_016_004,     
  @VSCO_MONE_ORCO  TD_VC_003,     
  @VDFE_EMIS_ORCO  TD_DT_001,     
  @VDFE_EMIS_DOCU  TD_DT_001,     
  @VSTI_CAMB    TD_VC_001,     
  @VSTI_ORIG    TD_VC_001,     
  @VSCO_MONE_NACI  TD_VC_003,     
  @VSCO_MONE_EXTR  TD_VC_003,     
  @VNFA_CAMB_DOCU  TD_NU_016_004,     
  @VNFA_CAMB_ORCO  TD_NU_016_004,     
  @VSTI_CAMB_LOGI  TD_VC_001,     
  @VSTI_ORIG_LOGI  TD_VC_001,    
  @VSMO_NACI_LOGI  TD_VC_003,      
  @VSMO_EXTR_LOGI  TD_VC_003,       
  @VNIM_COMP       TD_NU_016_004,     
  @VNIM_COMP_ORCO  TD_NU_016_004,     
  @VNNU_REGI_EMPR  TD_IN_001,    
  @VSCO_UNID_CNTB  TD_VC_003,    
  @VSCO_TIAU_PROV  TD_VC_001,    
  @VNIM_MVTO_CNTB  TD_NU_016_004,    
  @VNNU_SECU_PRES  TD_IN_001,    
  @VSCO_MONE_DOCU  TD_VC_003,    
  @VSST_PRES       TD_VC_001, 
  @VSCO_MONE_CPRO  TD_VC_003,
  @VSCO_MONE_CPRA  TD_VC_003


Begin Tran SP_TDMVTO_PART_I01
    
	SELECT @VDFE_USUA_MODI = Getdate()    
	
	
	Select	@VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG      
	From	TTFACA_OPCI      
	Where CO_EMPR = @ISCO_EMPR      
	And CO_MODU = 'TEEM0001'      
	And CO_MENU = 'FTEEMBA'      

	Select	@VSCO_MONE_CPRO =  CO_MONE_CPRO,
			@VSCO_MONE_CPRA =  CO_MONE_CPRA
	From 	TMPARA_LOGI
	Where  CO_EMPR = @ISCO_EMPR  

	
	If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )      
		Select  @VSTI_CAMB = TI_CAMB,     
		@VSTI_ORIG = TI_ORIG,     
		@VSCO_MONE_NACI = CO_MONE_DEFA,     
		@VSCO_MONE_EXTR = CO_MONE_EXTR,    
		@VSCO_TIAU_PROV = CO_TIAU_PROV,
		@VSST_PRES = ST_PRES    
		From    TMPARA_TESO    
		Where   CO_EMPR = @ISCO_EMPR     
	Else      
		Select  @VSCO_MONE_NACI = CO_MONE_DEFA,     
		@VSCO_MONE_EXTR = CO_MONE_EXTR,    
		@VSCO_TIAU_PROV = CO_TIAU_PROV,
		@VSST_PRES = ST_PRES    
		From    TMPARA_TESO    
		Where   CO_EMPR = @ISCO_EMPR     
	
	/*Para control de presupuestos*/    
	Select  @VNAA_CNTR = Year(FE_EMIS),     
			@VNMM_CNTR = Month(FE_EMIS),     
			@VDFE_EMIS_DOCU = FE_EMIS,     
			@VNFA_CAMB_DOCU = FA_TIPO_CAMB,    
			@VSCO_UNID_CNTB = CO_UNID_CONC,    
			@VSCO_MONE_DOCU = CO_MONE    
	From TMDOCU_PROV    
	Where CO_EMPR = @ISCO_EMPR    
	And CO_PROV = @ISCO_PROV    
	And CO_TIPO_DOCU = @ISCO_TIPO_DOCU    
	And NU_DOCU_PROV = @ISNU_DOCU_PROV    

	Select	@VSST_CNTR_PRES = ST_CNTR_PRES,     
			@VNNU_REGI_EMPR = NU_REGI_EMPR    
	From TMPARA_PRES    
	Where CO_EMPR = @ISCO_EMPR    
	And NU_ANNO = @VNAA_CNTR    

	Select @VSCO_MONE_ORCO = CO_MONE,     
		@VDFE_EMIS_ORCO = FE_EMIS,     
		@VNFA_CAMB_ORCO = FA_CAMB     
	From   TCORDE_COMP     
	Where  CO_EMPR = @ISCO_EMPR     
	And    NU_ORCO = @ISNU_DOCU_ORIG     


	Select  @VSTI_CAMB_LOGI = TI_OFIC_MERC,     
			@VSTI_ORIG_LOGI = TI_COMP_VENT,     
			@VSMO_NACI_LOGI = CO_MONE_CPRO,     
			@VSMO_EXTR_LOGI = CO_MONE_IMPO     
	From    TMPARA_LOGI
	Where   CO_EMPR = @ISCO_EMPR     
	
	-- Se obtiene el signo del documento para hacer el update adecuado    
	Select  @VSST_SIGN = ST_SIGN    
	From    TTDOCU_CNTB    
	Where   TI_DOCU = @ISCO_TIPO_DOCU    
	
	If @VSST_CNTR_PRES = 'S'    
	Begin    
	
		Declare CU_TDORDE_FACT_I01_1 Cursor     
		For    
		Select  Distinct(CO_PART)    
		From   TDORDE_COMP    
		Where  NU_ORCO = @ISNU_DOCU_ORIG    
		And CO_EMPR = @ISCO_EMPR    
		And CO_PART is not null    
		And Rtrim(Ltrim(CO_PART)) != ''    
		
		/* Abre Cursor de Interfase - Cabecera */    
		Open CU_TDORDE_FACT_I01_1    
		Fetch  CU_TDORDE_FACT_I01_1 Into @CSCO_PART    
		
		Select @VNNU_FETC_0001 = @@FETCH_STATUS    
		
		While (@VNNU_FETC_0001 = 0)    
		Begin    
			If (@VNNU_FETC_0001 < 0)    
			Begin    
				RAISERROR 20001 'FIN DE ARCHIVO'     
				CLOSE CU_TDORDE_FACT_I01_1     
				DEALLOCATE CU_TDORDE_FACT_I01_1     
				RETURN     
			End            
		
			If Exists( Select CO_EMPR    
			From   TRSIST_PART    
			Where  CO_EMPR = @ISCO_EMPR    
			And NU_ANNO = @VNAA_CNTR    
			And CO_SIST = 'OFITESO'    
			And CO_PART = @CSCO_PART)    	
			Begin    
			
				Select @VSTI_SITU = TI_SITU,     
				@VSST_CNTR_PARA = ST_CNTR_PRES,     
				@VSCO_MONE_PART = CO_MONE    
				From  TMPART    
				Where  CO_EMPR = @ISCO_EMPR     
				And NU_ANNO = @VNAA_CNTR     
				And CO_PART = @CSCO_PART     
				
				If @VSTI_SITU = 'ACT' And @VSST_CNTR_PARA = 'S'    
				Begin    
					Select @VNIM_PART = Isnull(Sum(Isnull(T1.CA_DOCU_MOVI*T1.IM_COST_COMP, 0)), 0),    
					@VNCA_PART = Isnull(Sum(Isnull(T1.CA_DOCU_MOVI, 0)), 0)    
					From   TDDOCU_ALMA T1, TDORDE_COMP T2    
					Where  T1.NU_DOCU = @ISNU_DOCU_GUIN    
					And    T1.TI_DOCU = @ISTI_DOCU_GUIN     
					And    T1.CO_EMPR = @ISCO_EMPR     
					And    T1.NU_SECU_ORCO = T2.NU_SECU    
					And    T1.NU_ORCO = T2.NU_ORCO    
					And    T1.CO_EMPR = T2.CO_EMPR    
					And    T1.TI_SITU = 'ACT'    
					And  T2.CO_PART = @CSCO_PART          
					
					Select @VNIM_PART = Round(@VNIM_PART ,2)    
					
					--Se convierte el valor a la moneda de la partida    
					Select @VNIM_COMP = (Select dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,      
					@VSCO_MONE_PART, @VDFE_EMIS_ORCO, @VNIM_PART, @VSTI_ORIG_LOGI,    
					@VSTI_CAMB_LOGI , 'S', @VSMO_NACI_LOGI, @VSMO_EXTR_LOGI, @VNFA_CAMB_ORCO))    
					
					--Se convierte el valor a la moneda de la partida    
					Select @VNIM_REAL = (Select dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,     
					@VSCO_MONE_PART, @VDFE_EMIS_DOCU, @VNIM_PART, @VSTI_CAMB,     
					@VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @VNFA_CAMB_DOCU))    
				
					--Se convierte el valor a la moneda de la contable    
					Select @VNIM_MVTO_CNTB = (Select dbo.FN_TCFACT_CAMB_Q02(@VSCO_MONE_ORCO,      
					@VSMO_NACI_LOGI, @VDFE_EMIS_DOCU, @VNIM_PART, @VSTI_CAMB,    
					@VSTI_ORIG , 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, @VNFA_CAMB_DOCU))    
				
					--Se ejecuta el SP para determinar si existe presupuesto para la partida    
					Exec OFIPRES..SP_TAPART_MENS_Q17 @ISCO_EMPR, @VNAA_CNTR, @VNMM_CNTR, 0, @CSCO_PART,     
							0, 0, @VNIM_REAL, @VNCA_PART, 'O', 'V', 'OFITESO', @VSVA_MENS Output, @VNIM_SALD Output      
			
					If Len(Isnull( Rtrim(Ltrim(@VSVA_MENS)), '')) = 0     
					Begin    
					
						/* Insertando en la Tabla TDMVTO_PART */    					
						SELECT @VNNU_SECU_PRES = ISNULL(MAX(NU_SECU),0) + 1    
						FROM  TDMVTO_PART    
						Where CO_EMPR = @ISCO_EMPR    
						AND   NU_ANNO = @VNAA_CNTR    
						AND   NU_MESE = @VNMM_CNTR    
						AND   NU_REGI_EMPR = @VNNU_REGI_EMPR    
						AND   CO_PART = @CSCO_PART       
			
						Insert into TDMVTO_PART (CO_EMPR, NU_ANNO, NU_MESE, NU_REGI_EMPR, CO_PART, NU_SECU, TI_ORIG_MVTO,    
						CO_SIST_ORIG, CO_UNID_CNTB, TI_AUXI_EMPR, CO_AUXI_EMPR, TI_DOCU, NU_DOCU,    
						FE_DOCU, CO_MONE, FA_CAMB, IM_MVTO_ORIG, IM_MVTO_CNTB, IM_MVTO_PART,     
						CN_CANT, NU_DOCU_ORCO, CO_USUA_CREA,FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
						Values  (@ISCO_EMPR, @VNAA_CNTR, @VNMM_CNTR, @VNNU_REGI_EMPR,@CSCO_PART, @VNNU_SECU_PRES,    
						'EJE', 'OFITESO', @VSCO_UNID_CNTB, @VSCO_TIAU_PROV, @ISCO_PROV, @ISCO_TIPO_DOCU,    
						@ISNU_DOCU_PROV,  @VDFE_EMIS_DOCU, @VSCO_MONE_DOCU, @VNFA_CAMB_DOCU, @VNIM_PART,    
						@VNIM_MVTO_CNTB,  @VNIM_REAL, @VNCA_PART, @ISNU_DOCU_ORIG,@ISCO_USUA_MODI,GETDATE(), @ISCO_USUA_MODI, GETDATE())    
						
						If @@error <> 0    
						Begin    
							Close CU_TDORDE_FACT_I01_1    
							Deallocate CU_TDORDE_FACT_I01_1    
							Rollback tran SP_TDMVTO_PART_I01
							Return    
						End    
			
						If @VSST_SIGN = 'S'    
						Update  TAPART_MENS    
						Set     IM_COMP = Isnull(IM_COMP,0) - @VNIM_COMP,     
						CN_COMP = Isnull(CN_COMP,0) - @VNCA_PART,     
						IM_EJEC = Isnull(IM_EJEC,0) + @VNIM_REAL,     
						CN_REAL = Isnull(CN_REAL,0) + @VNCA_PART,    
						FE_USUA_MODI = GETDATE(),    
						CO_USUA_MODI = @ISCO_USUA_MODI    
						Where   CO_EMPR = @ISCO_EMPR     
						And NU_ANNO = @VNAA_CNTR     
						And NU_MESE = @VNMM_CNTR     
						And NU_REGI_EMPR = @VNNU_REGI_EMPR    
						And CO_PART = @CSCO_PART    
						
						If @@error <> 0    
						Begin    
							Close CU_TDORDE_FACT_I01_1    
							Deallocate CU_TDORDE_FACT_I01_1    
							Rollback tran  SP_TDMVTO_PART_I01
							Return    
						End    
			
			
						If @VSST_SIGN = 'N'    
							Update  TAPART_MENS    
							Set     IM_COMP = Isnull(IM_COMP,0) + @VNIM_COMP,     
							CN_COMP = Isnull(CN_COMP,0) + @VNCA_PART,     
							IM_EJEC = Isnull(IM_EJEC,0) - @VNIM_REAL,     
							CN_REAL = Isnull(CN_REAL,0) - @VNCA_PART,    
							FE_USUA_MODI = GETDATE(),       
							CO_USUA_MODI = @ISCO_USUA_MODI    
							Where   CO_EMPR = @ISCO_EMPR     
							And NU_ANNO = @VNAA_CNTR     
							And NU_MESE = @VNMM_CNTR     
							And NU_REGI_EMPR = @VNNU_REGI_EMPR    
							And CO_PART = @CSCO_PART    
							
							If @@error <> 0    
							Begin    
								Close CU_TDORDE_FACT_I01_1    
								Deallocate CU_TDORDE_FACT_I01_1    
								Rollback tran SP_TDMVTO_PART_I01
								Return    
							End       
						End     
					End    	
				End    
			
			Fetch  CU_TDORDE_FACT_I01_1 Into @CSCO_PART    
			
			Select @VNNU_FETC_0001 = @@FETCH_STATUS    
	
		End --del cursor    

		Close CU_TDORDE_FACT_I01_1    
		Deallocate CU_TDORDE_FACT_I01_1    

	End --del If    
	--------------- CONTROL PRESUPUESTAL (FIN) ---------------    
	
	Commit Tran SP_TDMVTO_PART_I01
END    
/*-------------------------- Fin ------------------------------*/


GO
